﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Clases;
using Datos;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxGridView;
using System.Web.Security;

namespace Trade
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        datOrdenCompra datOrden = new datOrdenCompra();
        List<clsPreferencia> pref = new List<clsPreferencia>();

        protected void Page_Load(object sender, EventArgs e)
        {

            if (Session["NombreUsuario"] == null)
            {
                Session.RemoveAll();
                Session.Clear();
                Session.Abandon();
                FormsAuthentication.SignOut();
                Response.Redirect("SessionTimeout.aspx", true);
            }


            datOrdenCompra Orden = new datOrdenCompra();
            Int32 linea_orden = Orden.getLineaSiguiente(Convert.ToInt32(Session["Id_Order"]), Convert.ToDecimal(Session["Id_Empresa"]));
            Session["Id_Linea"] = linea_orden;

            if (!IsPostBack)
            {
                string var = Convert.ToString(Request.QueryString["prov"]);
                if (var != null)
                {
                    int bandera = 0;
                    String[] Datos = var.Split('?');
                    string cod_proveedor = Datos[0].ToString();
                    Session["Cod_Proveedor"] = cod_proveedor;
                    Consultar_DatosProveedor(Convert.ToInt32(cod_proveedor));
                    Int32 numero_orden = Orden.getIdSiguiente();
                    Session["Id_Order"] = numero_orden;

                    //Primero se captura los Id de la siguiente Orden de Compra
                    //Luego se hace le ingreso de la Orden con valores por default para poder guardar los detalles del mismo
                    if (bandera == 0)
                    {
                        clsOrdenCompra Cabecera_Orden = new clsOrdenCompra();
                        Cabecera_Orden.Empresa = Convert.ToDecimal(Session["Id_Empresa"]);
                        Cabecera_Orden.Numero = Convert.ToDecimal(Session["Id_Order"]);
                        Cabecera_Orden.Subgrupo = 1;
                        Cabecera_Orden.Proveedor = 1;
                        Cabecera_Orden.Importador = 1;
                        Cabecera_Orden.Usuario = Convert.ToDecimal(Session["CodigoUsuario"]);
                        Cabecera_Orden.FechaCreacion = DateTime.Today;
                        Cabecera_Orden.TermEnvio = 1;
                        Cabecera_Orden.TermPago = 1;
                        Cabecera_Orden.Trasbordo = 1;
                        Cabecera_Orden.FechaETD = DateTime.Today;
                        Cabecera_Orden.FechaETA = DateTime.Today;
                        Cabecera_Orden.EnvioParcial = 1;
                        Cabecera_Orden.PuertoDescarga = "";
                        Cabecera_Orden.DestinoFinal = "";
                        Cabecera_Orden.Estado = 3;
                        Cabecera_Orden.Avance = 0;
                        Cabecera_Orden.Padre = 0;
                        if (Orden.GuardarCabeceraOrden(Cabecera_Orden))
                        {
                            bandera = 1;
                        }
                    }
                }
            }

            //Buscando las preferencias que escogio el cliente
            pref = clsAccesoDatos.ConsultaPreferencia(Convert.ToDecimal(Session["Id_Empresa"]));
        }

        
        protected void btnBuscarCliente_ButtonClick(object source, DevExpress.Web.ASPxEditors.ButtonEditClickEventArgs e)
        {
            Popup_Buscar_Cliente.ShowOnPageLoad = true;
        }

        protected void btn_Grabar_Click(object sender, EventArgs e)
        {
            if (Obtener_Valores_Cabecera())
            {
                btnImprimir.Enabled = true;
                //Session["Id_Order"] = 0;
                //Response.Redirect("PurchaseOrder.aspx", true);
                //Clases.clsMail.enviar("aguachis87@gmail.com", "Pruebas de la Aplicación", "Si recibió este correo favor notificarlo a aguachis87@gmail.com", "", true);
            }
        }



        /*Nombre: Obtener_Valores_Detalle.
        * Descripción: función que obtiene los valores que se ingresarn en los controles del grid: dtgDetalleOrden.
        * Parámetros: ninguno.
        * Retorna: true o false según sea el caso.
        * Autor: Alvaro Guachisaca 2014-01-29.
        * Modificación: ninguna.
        */
        public bool Obtener_Valores_Cabecera()
        {
            try
            {
                //ASPxTextBox txtPaterno = (ASPxTextBox)grid_Proveedores.FindEditFormTemplateControl("txtPaterno");
                int proveedor = Convert.ToInt32(Session["Cod_Proveedor"]);
                int importador = Convert.ToInt32(((ASPxComboBox)NavBar_Cliente.Groups[2].FindControl("cbxImporterName")).SelectedItem.Value.ToString());
                string fechaCreacion = ((ASPxDateEdit)NavBar_Cliente.Groups[0].FindControl("purchase_date")).Text;
                int termEnvio = Convert.ToInt32(((ASPxComboBox)NavBar_Cliente.Groups[1].FindControl("cbxTermDelivery")).SelectedItem.Value.ToString());
                int termPago = Convert.ToInt32(((ASPxSpinEdit)NavBar_Cliente.Groups[0].FindControl("spePaymentTerms")).Text);
                int Transbordo = Convert.ToInt32(((ASPxComboBox)NavBar_Cliente.Groups[1].FindControl("cbxTransshipment")).SelectedItem.Value.ToString());
                string fechaETD = ((ASPxDateEdit)NavBar_Cliente.Groups[1].FindControl("date_ETD")).Text;
                string fechaETA = ((ASPxDateEdit)NavBar_Cliente.Groups[1].FindControl("date_ETA")).Text;
                int EnvioParcial = Convert.ToInt32(((ASPxComboBox)NavBar_Cliente.Groups[1].FindControl("cbxPartialShipmnt")).SelectedItem.Value.ToString());
                string puertoDescarga =  ((ASPxTextBox)NavBar_Cliente.Groups[1].FindControl("txtPortDischarge")).Text;
                string destinoFinal =  ((ASPxTextBox)NavBar_Cliente.Groups[1].FindControl("txtfinaldestination")).Text;
                int estado = 3;
                int avance = Convert.ToInt32(((ASPxSpinEdit)NavBar_Cliente.Groups[0].FindControl("speAdvance")).Text);
                //creando la clase cabecera 
                clsOrdenCompra Cabecera_Orden = new clsOrdenCompra();
                Cabecera_Orden.Empresa = Convert.ToDecimal(Session["Id_Empresa"]);
                Cabecera_Orden.Numero = Convert.ToDecimal(Session["Id_Order"]);
                Cabecera_Orden.Subgrupo = 1;
                Cabecera_Orden.Usuario = Convert.ToDecimal(Session["CodigoUsuario"]);
                Cabecera_Orden.Proveedor = proveedor;
                Cabecera_Orden.Importador = importador;
                Cabecera_Orden.FechaCreacion = Convert.ToDateTime(fechaCreacion);
                Cabecera_Orden.TermEnvio = termEnvio;
                Cabecera_Orden.TermPago = termPago;
                Cabecera_Orden.Trasbordo = Transbordo;
                Cabecera_Orden.FechaETD = Convert.ToDateTime(fechaETD);
                Cabecera_Orden.FechaETA = Convert.ToDateTime(fechaETA);
                Cabecera_Orden.EnvioParcial = EnvioParcial;
                Cabecera_Orden.PuertoDescarga = puertoDescarga;
                Cabecera_Orden.DestinoFinal = destinoFinal;
                Cabecera_Orden.Estado = estado;
                Cabecera_Orden.Avance = avance;
                Cabecera_Orden.Padre = 0;
                //Actualizando la cabecera
                datOrdenCompra Orden = new datOrdenCompra();
                if (Orden.ActualizarCabeceraOrden(Cabecera_Orden, Convert.ToDecimal(Session["Id_Empresa"]), Convert.ToInt32(Session["Id_Order"])))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error al obtener lod valores de la cabecera " + e);
                return false;
            }
        }


        /*Nombre: Consultar_DatosProveedor.
        * Descripción: función que consulta si el detalle tiene datos ingresados, si es así los muestra.
        * Parámetros: numero de la orden y el código de la empresa.
        * Retorna: ninguno
        * Autor: Alvaro Guachisaca 2014-01-29.
        * Modificación: ninguna.
        */
        protected void Consultar_DatosProveedor(int codigo_proveedor)
        {
            datOrdenCompra OrderDato = new datOrdenCompra();
            clsProveedorOrden proveedor = new clsProveedorOrden();
            proveedor = OrderDato.ConsultarProveedorOrden(codigo_proveedor);
            Llenar_Controles(proveedor);
        }




        /*Nombre: Llenar_Controles
        * Descripción: función que llena los controles del Purchase Order con los datos del proveedor seleccionado.
        * Parámetros: recibe una lista con los datos del proveedor.
        * Retorna: true o false según sea el caso.
        * Autor: Alvaro Guachisaca 2014-02-02.
        * Modificación: ninguna.
        */
        public bool Llenar_Controles(clsProveedorOrden proveedor)
        {
            try
            {
                //ASPxTextBox txtPaterno = (ASPxTextBox)grid_Proveedores.FindEditFormTemplateControl("txtPaterno");
                ((ASPxButtonEdit)NavBar_Cliente.Groups[0].FindControl("btnBuscarCliente")).Text = Convert.ToString(proveedor.VendorName);
                ((ASPxDateEdit)NavBar_Cliente.Groups[0].FindControl("purchase_date")).Text = DateTime.Today.ToShortDateString();
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtPhone")).Text = Convert.ToString(proveedor.Phone);
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtFax")).Text = Convert.ToString(proveedor.Phone);
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtContactName")).Text = Convert.ToString(proveedor.ContactName);
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtNumberOrder")).Text = "#####"; 
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtEmail")).Text = Convert.ToString(proveedor.Email);
                ((ASPxTextBox)NavBar_Cliente.Groups[0].FindControl("txtPurchased")).Text = Convert.ToString(Session["Nombre_Empresa"]);
                ((ASPxMemo)NavBar_Cliente.Groups[2].FindControl("txtAdrdress")).Text = Convert.ToString(proveedor.Address);
                ((ASPxTextBox)NavBar_Cliente.Groups[2].FindControl("txtPacker")).Text = Convert.ToString(proveedor.VendorName);
                ((ASPxComboBox)NavBar_Cliente.Groups[2].FindControl("cbxImporterName")).Items.Add("ninguno",0);
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error al llenar los controles de la Orden " + e);
                return false;
            }
        }


        protected void Grid_Source_Selecting(object sender, EntityDataSourceSelectingEventArgs e)
        {
            //Validar la busqueda en el select validando por codigo de empresa y numero de la orden
            Grid_Source.WhereParameters.Clear();
            Grid_Source.AutoGenerateWhereClause = true;
            Grid_Source.WhereParameters.Add("empresa", TypeCode.Decimal, Session["Id_Empresa"].ToString());
            Grid_Source.WhereParameters.Add("numero", TypeCode.Decimal, Session["Id_Order"].ToString());
            //Consultar_DtgDetalleOrden(1, Convert.ToInt32(Session["Id_Empresa"]));
            //Consultar_DtgDetalleOrden(1, 50);
        }

        protected void Importer_Selecting(object sender, EntityDataSourceSelectingEventArgs e)
        {
            Importer.WhereParameters.Clear();
            Importer.AutoGenerateWhereClause = true;
            Importer.WhereParameters.Add("empresa", TypeCode.Decimal, Session["Id_Empresa"].ToString());
        }

        protected void btnImprimir_Click(object sender, EventArgs e)
        {
            string url = String.Format("Reporte.aspx?t=1?{0}?{1}", Session["Id_Empresa"],Session["Id_Order"]);
            abreVentana(url);
        }


        private void abreVentana(string ventana)
        {
            string Clientscript = String.Format("<script>var hija=window.open('{0}','Report'); if(!hija.isClosed){{hija.focus();}}</script>", ventana);
            if (!ClientScript.IsStartupScriptRegistered("WOpen"))
            {
                ClientScript.RegisterStartupScript(this.GetType(), "WOpen", Clientscript);
                //Response.Redirect("FacturaPrint.aspx");
            }
        }

        protected void ckbAdvance_CheckedChanged(object sender, EventArgs e)
        {
            ((ASPxSpinEdit)NavBar_Cliente.Groups[0].FindControl("speAdvance")).Enabled = true;
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            //string url = String.Format("GeneralReport.aspx?t=1?{0}?{1}", Session["Id_Empresa"], Session["Id_Order"]);
            //abreVentana(url);
            Session["Id_Order"] = 0;
            Response.Redirect("PurchaseOrder.aspx", true);
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            ((ASPxButtonEdit)NavBar_Cliente.Groups[0].FindControl("btnBuscarCliente")).Enabled = true;
        }

        protected void btnError_Click(object sender, EventArgs e)
        {
            Response.Redirect("Home.aspx", true);
        }

        protected void EDSBrand_Selecting(object sender, EntityDataSourceSelectingEventArgs e)
        {
            EDSBrand.WhereParameters.Clear();
            EDSBrand.AutoGenerateWhereClause = true;
            EDSBrand.WhereParameters.Add("empresa", TypeCode.Decimal, Session["Id_Empresa"].ToString());
        }

        protected void EDSPacking_Selecting(object sender, EntityDataSourceSelectingEventArgs e)
        {
            //Buscando las preferencias que escogio el cliente
            pref = clsAccesoDatos.ConsultaPreferencia(Convert.ToDecimal(Session["Id_Empresa"]));

            EDSPacking.WhereParameters.Clear();
            EDSPacking.AutoGenerateWhereClause = true;
            EDSPacking.WhereParameters.Add("unidadMedida", TypeCode.Decimal, pref[2].valor.ToString());
        }

    }
}